<?php

Yii::import('application.modules.campanias.models._base.BaseCampaniaTareaProgramada');

class CampaniaTareaProgramada extends BaseCampaniaTareaProgramada {

    /**
     * @return CampaniaTareaProgramada
     */
    public static function model($className = __CLASS__) {
        return parent::model($className);
    }

    public static function label($n = 1) {
        return Yii::t('app', 'CampaniaTareaProgramada|CampaniaTareaProgramadas', $n);
    }

    /**
     * @author Alex Yepez <ayepez@tradesystem.com.ec>
     * reglas de validación
     */
    public function rules() {
        return array(
            array('nombre, usuario_creacion_id, fecha_accion, hora_accion, campania_id, accion_tipo, medio_envio', 'required'),
            array('usuario_creacion_id, usuario_actualizacion_id, campania_id, motivo_id', 'numerical', 'integerOnly' => true),
            array('nombre, medio_envio', 'length', 'max' => 45),
            array('estado', 'length', 'max' => 9),
            array('accion_tipo, template', 'length', 'max' => 50),
            array('plantilla_id', 'length', 'max' => 11),
            array('todos', 'length', 'max' => 2),
            array('fecha_actualizacion', 'safe'),
            array('estado', 'in', 'range' => array('PENDIENTE', 'REALIZADO', 'ANULADO')), // enum,
//            array('todos', 'in', 'range' => array('SI', 'NO')), // enum,
            array('fecha_actualizacion, usuario_actualizacion_id, estado, medio_envio, plantilla_id, motivo_id, template, todos', 'default', 'setOnEmpty' => true, 'value' => null),
            array('id, nombre, fecha_creacion, usuario_creacion_id, fecha_actualizacion, usuario_actualizacion_id, fecha_accion, hora_accion, estado, campania_id, accion_tipo, medio_envio, plantilla_id, motivo_id, template, todos', 'safe', 'on' => 'search'),
        );
    }

    public function scopes() {
        return array(
            'sinAnulados' => array(
                'condition' => 't.estado != :estado',
                'params' => array(
                    ':estado' => Campanias_Constants::TAREA_PROGRAMADA_ANULADO
                )
            )
        );
    }

    /**
     * 
     * @author Alex Yepez <ayepez@tradesystem.com.ec>
     * retorna las tareas programadas a relizar en esa fecha y hora 
     * @param type $estado
     * @param type $fechaFin
     * @param type $horaFin
     * @return type
     */
    public function getTaresProgramadas($estado, $fechaFin, $horaFin) {
        $command = Yii::app()->db->createCommand()
                ->select('ctp.id as id')
                ->from('campania_tarea_programada ctp')
                ->where('ctp.estado = :estado', array(':estado' => $estado));
        $command->andWhere('ctp.fecha_accion = :fechaFin and ctp.hora_accion <= :horaFin', array(
            ':fechaFin' => $fechaFin,
            ':horaFin' => $horaFin
        ));
        return $command->queryColumn();
    }

    public function searchTareasProg($campania_id) {
        $criteria = new CDbCriteria;
        $criteria->compare('id', $this->id);
        $criteria->compare('nombre', $this->nombre, true);
        $criteria->compare('fecha_creaccion', $this->fecha_creaccion, true);
        $criteria->compare('usuario_creacion_id', $this->usuario_creacion_id);
        $criteria->compare('fecha_actualizacion', $this->fecha_actualizacion, true);
        $criteria->compare('usuario_actualizacion_id', $this->usuario_actualizacion_id);
        $criteria->compare('fecha_accion', $this->fecha_accion, true);
        $criteria->compare('hora_accion', $this->hora_accion, true);
        $criteria->compare('estado', $this->estado, true);
        $criteria->compare('campania_id', $this->campania_id);
        $criteria->compare('accion_tipo', $this->accion_tipo, true);
        $criteria->compare('medio_enivo', $this->medio_enivo, true);
        $criteria->compare('plantilla_id', $this->plantilla_id);
        $criteria->compare('motivo_id', $this->motivo_id);
        $criteria->compare('template', $this->template, true);
        return new CActiveDataProvider($this, array(
            'criteria' => $criteria,
        ));
    }

}
